#include <stdio.h>
#include <stdlib.h>

int main() {
    // 第1步：从「变量地址」开始
    int a = 10;
    printf("a的值：%d，a的地址：%p\n", a, &a);
    int *p1 = &a;
    printf("指针*p的值：%d\n", *p1);

    //第2步：掌握指针的「声明与基本操作」
    int arr[] = { 1,2,3 };
    int *p2 = arr;  // p指向arr
    printf("arr[0] = %d\n", *(p2 + 0));  // 输出1
    printf("arr[1] = %d\n", *(p2 + 1));  // 输出2
    printf("arr[2] = %d\n", *(p2 + 2));  // 输出3

    // 第3步：结合数组/字符串实战
    char str[] = "Hello";
    char *s = str;
    int num = 0;
    while (*s != '\0') {
        num++;
        printf("第 %d 打印 %c\n", num, *s);
        s++;  // 指针移动到下一个字符
    }

    // 第4步：进阶内存管理
    int *p = (int *)malloc(5 * sizeof(int));  // 分配5个int空间

    if (p != NULL) {
        p[0] = 10;
        p[1] = 9;
        p[2] = 8;
        p[3] = 7;
        p[4] = 6;
        printf("*p的值%d", p[0]);
        free(p);     // 释放内存
    }
    return 0;
}